import { defineConfig } from 'vitepress';
import mdContainer from 'markdown-it-container';
import path from 'node:path';
import fs from 'node:fs';
import vueJsx from '@vitejs/plugin-vue-jsx';

// https://vitepress.dev/reference/site-config
export default defineConfig({
  title: 'iBiz Plugin Vue3插件项目',
  description: 'iBiz Plugin Vue3插件项目',
  lang: 'zh-CN',
  themeConfig: {
    // https://vitepress.dev/reference/default-theme-config
    lightModeSwitchTitle: '切换到浅色模式',
    darkModeSwitchTitle: '切换到深色模式',

    docFooter: {
      prev: '上一页',
      next: '下一页',
    },

    outlineTitle: '页面导航',

    socialLinks: [
      {
        icon: {
          svg: `
          <svg height="32" viewBox="0 0 32 32" width="32" xmlns="http://www.w3.org/2000/svg">
            <title>gitee</title>
            <g fill="none" fill-rule="evenodd">
            <circle cx="16" cy="16" fill="#c71d23" r="16"/>
            <path d="m24.0987698 14.2225144h-9.0863697c-.4362899.000207-.7900048.3538292-.790326.7901191l-.0005173 1.9752185c-.0003277.4363707.353328.7902117.7896987.790326.0000712 0 .0001424 0 .0002135-.0002135l5.5317648-.0000461c.4363708-.0000102.7901221.3537352.7901257.790106 0 .0000022 0 .0000044-.0000066.0000066v.1975077.1975318c0 1.3091122-1.0612451 2.3703573-2.3703573 2.3703573h-7.5067195c-.4363081-.0000218-.790009-.353713-.7900429-.7900211l-.0002069-7.5059917c-.0001014-1.3091122 1.0611145-2.3703865 2.3702267-2.3704226.0000217 0 .0000435 0 .0000653.0000653h11.0602463c.4361793-.0004902.7898484-.35394.7906091-.79011894l.0012251-1.97521881c.0007606-.43637034-.3527683-.79033806-.7891389-.79060871-.0001634-.0000001-.0003268-.00000015-.0004901.00048976h-11.0617654c-3.27278051 0-5.92589329 2.65311278-5.92589329 5.9258933v11.0612755c0 .4363707.35374837.7901191.7901191.7901191h11.65447149c2.9454379 0 5.3331872-2.3877493 5.3331872-5.3331872v-4.5430682c0-.4363707-.3537484-.7901191-.7901191-.7901191z" fill="#fff"/>
            </g>
          </svg>`,
        },
        link: 'https://gitee.com/zhangpingchuan/ibiz-plugin-vue3',
      },
    ],

    nav: [{ text: '指南', link: '/guide/getting-started' }],

    sidebar: [
      {
        text: '指南',
        items: [
          {
            text: '快速开始',
            link: '/guide/getting-started',
          },
          {
            text: '编辑器插件',
            collapsed: true,
            items: [
              {
                text: '人机识别控件',
                link: '/guide/auth-captcha-editor',
              },
              {
                text: '级联选项框(已确认)',
                link: '/guide/cascade-checkbox',
              },
              {
                text: '部门选择器',
                link: '/guide/department-select',
              },
              {
                text: '公式编辑器',
                link: '/guide/formula',
              },
              {
                text: '图片多项预览(已确认)',
                link: '/guide/image-multiple-preview',
              },
              {
                text: '单位选择器',
                link: '/guide/org-select',
              },
              {
                text: '人员数据选择',
                link: '/guide/personnel-picker',
              },
              {
                text: '人员选择器',
                link: '/guide/personnel-select',
              },
              {
                text: 'PQL条件编辑器',
                link: '/guide/pql-condition',
              },
              {
                text: '进度条',
                link: '/guide/progress',
              },
              {
                text: '步骤查询器',
                link: '/guide/query-steps',
              },
              {
                text: '标签选择',
                link: '/guide/tag-select',
              },
              {
                text: '矩形树图(已确认)',
                link: '/guide/tree-map',
              },
              {
                text: '数据选择（管理）',
                link: '/guide/manage-mpicker',
              },
              {
                text: 'univer编辑器',
                link: '/guide/univer-editor',
              },
              {
                text: '选项框列表增强',
                link: '/guide/pcheckbox-list-extend',
              },
            ],
          },
          {
            text: '部件插件',
            collapsed: true,
            items: [
              {
                text: '锚点看板',
                link: '/guide/anchor-dashboard',
              },
              {
                text: '分组表格',
                link: '/guide/group-grid',
              },
              {
                text: '日历',
                link: '/guide/light-calendar',
              },
              {
                text: '过程时间线',
                link: '/guide/process-time-line',
              },
              {
                text: '分页导航选择面板',
                link: '/guide/tab-nav-select-panel',
              },
              {
                text: '瓦片地图',
                link: '/guide/tile-map',
              },
              {
                text: '锚点卡片',
                link: '/guide/anchor-data-view',
              },
              {
                text: '锚点列表',
                link: '/guide/anchor-list',
              },
              {
                text: '列表分组平铺展示样式(已确认)',
                link: '/guide/list-group-display-style',
              },
              {
                text: '列表时光轴',
                link: '/guide/list-time-axis',
              },
              {
                text: '简单列表',
                link: '/guide/sample-list',
              },
              {
                text: 'LuckySheet',
                link: '/guide/lucky-sheet',
              },
              {
                text: '重复器表格排序插件',
                link: '/guide/grid-mdctrl-sort',
              },
              {
                text: '序号表格',
                link: '/guide/number-grid',
              },
              {
                text: '流程历史',
                link: '/guide/process-history',
              },
              {
                text: '倒计时按钮',
                link: '/guide/countdown-button',
              },
              {
                text: '自定义表单分组伸缩图标',
                link: '/guide/custom-group-collapse-icon',
              },

              {
                text: '多选视图表格插件（多选框）',
                link: '/guide/checkbox-grid',
              },
              {
                text: '网盘树',
                link: '/guide/net-disk-tree',
              },
            ],
          },
          {
            text: '列表项插件',
            collapsed: true,
            items: [
              {
                text: '动态文本编辑器',
                link: '/guide/dynamic-text-extend',
              },
            ],
          },
          {
            text: '表单自定义控件插件',
            collapsed: true,
            items: [
              {
                text: '重复器动态表格',
                link: '/guide/repeater-dynamic-grid',
              },
              {
                text: '重复器表单',
                link: '/guide/repeater-form',
              },
            ],
          },
          {
            text: '行为插件',
            collapsed: true,
            items: [
              {
                text: '数据导出',
                link: '/guide/data-export-uiaction',
              },
              {
                text: '数据导入',
                link: '/guide/data-import-uiaction',
              },
              {
                text: '文件下载(已确认)',
                link: '/guide/file-download',
              },
              {
                text: '文件上传(已确认)',
                link: '/guide/file-upload',
              },
              {
                text: '网盘文件下载(已确认)',
                link: '/guide/net-dist-file-download',
              },
              {
                text: '网盘文件上传',
                link: '/guide/net-dist-file-upload',
              },
            ],
          },
          {
            text: '方法插件',
            collapsed: true,
            items: [
              {
                text: '缓存过滤',
                link: '/guide/storage-filter-de-method',
              },
            ],
          },
          {
            text: '通用组件',
            collapsed: true,
            items: [
              {
                text: '头像',
                link: '/guide/avatar',
              },
              {
                text: '关系圈设计',
                link: '/guide/relationship-design',
              },
              {
                text: 'univer',
                link: '/guide/univer',
              },
              {
                text: '地图',
                link: '/guide/map',
              },
            ],
          },
          {
            text: '条件生成器',
            link: '/guide/condition-builder',
          },
          {
            text: '甘特图',
            link: '/guide/gantt',
          },
        ],
      },
    ],
  },
  markdown: {
    config: md => {
      md.use(mdContainer, 'demo', {
        validate(params: string) {
          return !!params.trim().match(/^demo\s*(.*)$/);
        },

        render(
          tokens: {
            nesting: number;
            info: string;
            content: string;
            type: string;
            children?: { content: string }[];
          }[],
          idx: number,
        ) {
          if (tokens[idx].nesting === 1) {
            const m = tokens[idx].info.trim().match(/^demo\s*(.*)$/);
            const src = m && m.length > 1 ? m[1] : '';
            if (!src) {
              throw new Error(`未配置图片`);
            }
            const sourceFileToken = tokens[idx + 2];
            const sourceFile = sourceFileToken.children?.[0].content || '';
            let rawSource = '';
            if (sourceFileToken.type === 'inline' && sourceFile) {
              rawSource = fs.readFileSync(
                path.resolve('examples', sourceFile),
                'utf-8',
              );
            }
            if (!rawSource) {
              throw new Error(`未找到文件: ${sourceFile}`);
            }
            const splitArr = sourceFile.split('.');
            const ext = splitArr[splitArr.length - 1];
            const source = md.render(`\`\`\` ${ext}\n${rawSource}\n\`\`\``);
            return `<Demo src="${src}" rawSource="${encodeURIComponent(
              rawSource,
            )}" source="${encodeURIComponent(source)}" >`;
          } else {
            return '</Demo>';
          }
        },
      });
    },
  },
  vite: {
    plugins: [vueJsx()],
  },
});
